const logger = require('../lib/logger');
const rule = require('../lib/model/rule');
const dataSource = require('../lib/model/dataSource');
const grabSource = require('../lib/model/grabSource');
const storageModel = require('../lib/model/storageModel');
const category = require('../lib/model/category');
const infoType = require('../lib/model/infoType');
const monitorConf = require('../lib/model/monitorConf');
const businessDetails = require('../lib/model/businessDetails');
const queueProxy = require('../lib/proxy/queue/index')();
const crawlTestProxy = require('../lib/proxy/crawlTest/index')('LocalTest', {
    // strPrx: 'News.NewCrawlerServer.NewCrawlerObj@tcp -h 127.0.0.1 -p 15021 -t 60000'
    strPrx: global.CONFIG.proxy.NewCrawlerObj
});
// const moment = require('moment');
// const _ = require('lodash');

class CrawlController {
    /*
    constructor() {
    }
    */
    getDataSourceList(req, res) {
        dataSource.getDataSourceList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getDataSourceList err:', err);
        });
    }

    saveDataSource(req, res) {
        dataSource.saveDataSource(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveDataSource err:', err);
        });
    }

    getGrabSourceList(req, res) {
        grabSource.getGrabSourceList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getGrabSourceList err:', err);
        });
    }

    saveGrabSource(req, res) {
        grabSource.saveGrabSource(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveGrabSource err:', err);
        });
    }

    getRuleList(req, res) {
        rule.getRuleList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getRuleList err:', err);
        });
    }

    saveRuleInfo(req, res) {
        rule.saveRuleInfo(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveRuleInfo err:', err);
        });
    }

    deleteRuleInfo(req, res) {
        rule.deleteRuleInfo(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.deleteRuleInfo err:', err);
        });
    }

    getStorageModelList(req, res) {
        storageModel.getStorageModelList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getStorageModelList err:', err);
        });
    }

    saveStorageModel(req, res) {
        storageModel.saveStorageModel(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveStorageModel err:', err);
        });
    }

    deleteStorageModel(req, res) {
        storageModel.deleteStorageModel(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.deleteStorageModel err:', err);
        });
    }

    getCategoryList(req, res) {
        category.getCategoryList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getCategoryList err:', err);
        });
    }

    getCategoryTree(req, res) {
        category.getCategoryTree(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getCategoryTree err:', err);
        });
    }

    saveCategory(req, res) {
        category.saveCategory(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveCategory err:', err);
        });
    }

    getInfoTypeList(req, res) {
        infoType.getInfoTypeList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getInfoTypeList err:', err);
        });
    }

    saveInfoType(req, res) {
        infoType.saveInfoType(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveInfoType err:', err);
        });
    }

    getMonitorConfList(req, res) {
        monitorConf.getMonitorConfList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getMonitorConfList err:', err);
        });
    }

    saveMonitorConf(req, res) {
        monitorConf.saveMonitorConf(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveMonitorConf err:', err);
        });
    }

    getBusinessDetailsList(req, res) {
        businessDetails.getBusinessDetailsList(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getBusinessDetailsList err:', err);
        });
    }

    saveBusinessDetails(req, res) {
        businessDetails.saveBusinessDetails(req).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveBusinessDetails err:', err);
        });
    }

    getQueueLength(req, res) {
        let { queueName } = req.params;
        queueProxy.getQueueLength(queueName).then((data) => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getQueueLength err:', err);
        });
    }

    testRule(req, res) {
        let reqData = req.body;
        logger.data.info('controller.crawl.testRule reqData：', reqData);
        let { url, config_id, station_id } = reqData;
        crawlTestProxy.testRule(url, config_id, station_id).then(data => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.testRule err:', err);
        });
    }

    getTestRuleResult(req, res) {
        let reqData = req.body;
        logger.data.info('controller.crawl.getTestRuleResult reqData：', reqData);
        let { url, config_id, station_id } = reqData;
        crawlTestProxy.getTestRuleResult(url, config_id, station_id).then(data => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.getTestRuleResult err:', err);
        });
    }

    saveTestRuleResult(req, res) {
        let reqData = req.body;
        logger.data.info('controller.crawl.saveTestRuleResult reqData：', reqData);
        let { resultContent } = reqData;
        crawlTestProxy.saveTestRuleResult(resultContent).then(data => {
            res.json(data);
        }).catch((err) => {
            logger.error.error('controller.crawl.saveTestRuleResult err:', err);
        });
    }
}

module.exports = new CrawlController();
